#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    printf("I am a process: %d\n", getpid());
    sleep(1);
    exit(3);//终止进程
}

//enum {
//    success=0,
//    open_err,
//    malloc_err
//};
//
//const char* errorToDesc(int code)
//{
//    switch(code)
//    {
//        case success:
//            return "success";
//        case open_err:
//            return "fail open error";
//        case malloc_err:
//            return "malloc fail";
//        default:
//            return "unknow error";
//    }
//}
//
//int main()
//{
//    int code = malloc_err;
//    printf("%s\n", errorToDesc(code));
//
//    //for(int i=0; i<200; i++)
//    //{
//    //    printf("%d: %s\n", i, strerror(i));
//    //}
//    return code;
//}


//int g_val = 100;
//int main()
//{
//    pid_t id = fork();
//    if(id == 0)
//    {
//        int cnt = 1;
//        while(1)
//        {
//            printf("child, pid: %d, ppid: %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
//            sleep(1);
//            cnt++;
//            if(cnt == 5)
//            {
//                g_val = 200;
//                printf("child change g_val: 100->200\n");
//            }
//        }
//    }
//    else 
//    {
//
//        while(1)
//        {
//            printf("father, pid: %d, ppid: %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
//            sleep(1);
//        }
//        
//    }
//    return 0;
//}

//int g_unval;
//int g_val = 100;
//
//int main(int argc, char* argv[], char* env[])
//{
//    printf("code addr: %p\n", main);
//    printf("init data addr: %p\n", &g_val);
//    printf("uninit data addr: %p\n", &g_unval);
//
//    char *heap = (char*)malloc(20);
//    char *heap1 = (char*)malloc(20);
//    char *heap2 = (char*)malloc(20);
//    char *heap3 = (char*)malloc(20);
//    printf("heap addr: %p\n", heap);
//    printf("heap1 addr: %p\n", heap1);
//    printf("heap2 addr: %p\n", heap2);
//    printf("heap3 addr: %p\n", heap3);
//
//    printf("stack addr: %p\n", &heap);
//    printf("stack1 addr: %p\n", &heap1);
//    printf("stack2 addr: %p\n", &heap2);
//    printf("stack3 addr: %p\n", &heap3);
//
//    for(int i=0; argv[i]; i++)
//    {
//        printf("argv[%d] addr: %p\n",i, argv[i]);
//    }
//    for(int i=0; env[i]; i++)
//    {
//        printf("env[%d] addr: %p\n", i, env[i]);
//    }
//
//    //extern char **environ;
//    //for(int i=0;environ[i];i++)
//    //{
//    //    printf("%s\n", environ[i]);
//    //}
//    return 0;
//}
